package com.tfjybj.itoo.exam.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.exam.entity.ExamRoomEntity;
import com.tfjybj.itoo.exam.model.ExamExamRoomListModel;
import com.tfjybj.itoo.exam.model.ExamRoomModel;
import com.tfjybj.itoo.exam.model.MailInfoModel;
import com.tfjybj.itoo.exam.template.ExamRoomStuTeaModel;

import java.util.Date;
import java.util.List;


/**
 * ExamRoomService接口
 * examRoom表
 *
 * @author 任晓帅
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 19:40:28
 */
public interface ExamRoomService extends BaseServicePlus<ExamRoomEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据考场名称模糊查询examRoom
     *
     * @param name     考场名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的examRoom
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    PageInfo<ExamRoomEntity> queryByLikeName(String name, Integer pageNo, Integer pageSize);


    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 查询考场详情
     *
     * @param   courseId,examNameId
     * @return examRoomModels
     * @author 王雪芬
     * @since 2.0.0        2018-11-19 12:16:19
     */
    List<ExamRoomModel> queryExaminRoot(String courseId, String examNameId);

    /**
     * @param examId String
     * @return 删除条数
     * @author maying
     * @since 2018年11月18日10:19:20
     */
    int delExamroomArray(String examId);

    /**
     * @param examId
     * @return 考场List
     * @author maying
     * @since 2018年11月18日16:00:38
     * 根据考试id查询考场
     */
    List<ExamRoomEntity> selexamRoom(String examId);

    /**
     * 根据操作人和查询正在进行的考试
     *
     * @param operator String
     * @return 考场信息
     * @author 王雪芬
     * @since 2018年11月22日10:19:20
     */
    List<ExamRoomModel> queryExamRoom(String operator);

    /**
     * 发送考试情况通报表
     *
     * @return 大于0则是成功, 小于1
     * @author 王雪芬
     * @since 2.0.0        2018-11-19 12:07:46
     */
    int sendExamWorkInfo(MailInfoModel info);

    /**
     * 完成选择时插入考场和人数以及监考老师(单个有序插入)
     *
     * @param jsonList
     * @author maying
     * @since 2018-12-14 08:48:08
     */
    boolean saveStuExamRoom(ExamRoomStuTeaModel jsonList);

    /**
     * 查询已安排有剩余容量的考场
     *
     * @param fuzzyValue 输入框中的值（模糊查询）
     * @param schoolKey       校区代号
     * @param startTime 开始考试时间
     * @param endTime 考试结束时间
     * @author maying
     * @since 2018-12-20 16:01:55
     * @return 考场集合
     */
    List<ExamRoomModel> selectSurplusRoom(String fuzzyValue, String schoolKey, String startTime, String endTime);


    /**
     * 点击考场选择按钮,判断此考场是否选择过
     *
     * @param roomId     教室id
     * @param schoolCode 校区代号
     * @param startTime  考试开始时间
     * @author 马莹
     * @since 2018-12-21 12:00:17
     */
    List<ExamRoomModel> selectExamRoom(String roomId, String schoolCode, String startTime);

    /**
     * 根据考试id查询所有监考老师,对应考场
     *
     * @param examId      考试id
     * @param teacherName 模糊参数
     * @return
     * @author 马莹
     * @since 2018-12-23 09:43:39
     */
    List<ExamRoomModel> findTeacher(String examId, String teacherName);

    /**
     * 根据考试id 更新开始时间和理论交卷时间
     *
     * @param examId    考试id
     * @param startTime 考试时间
     * @param endTime   理论交卷时间
     * @author 马莹
     * @since 2018-12-24 20:36:36
     */
    boolean updateExamRoomInfomation(String examId, Date startTime, Date endTime);

    /**
     * 根据考试id筛选考场使用情况
     *
     * @param examId 考试id
     * @return List<ExamRoomModel>
     * @author 马莹
     * @since 2018-12-26 15:18:37
     */
    List<ExamRoomModel> selectExamRoomIng(String examId);

    ExamRoomModel queryExamRootTime(String examRoomId);

    /**
     * 根据考试id查询考场
     * @author 于云秀
     * @since 2019年1月5日
     * @param examId
     * @return
     */
    List<ExamRoomModel> selectExamRoomList(String examId, String operator);

    /**
     * 根据考试id查询考场和考试信息
     *
     * @param examIdList 考试id集合
     * @return 考试和考场信息集合
     * @author 马莹
     * @since 2019-1-7 09:43:31
     */
    List<ExamExamRoomListModel> selectExamAndExamRoomInfomation(List<String> examIdList);
}




